const Koa = require('koa')
const path = require('path')
const morgan = require("koa-morgan");
const mongoose = require('mongoose')
// const Router = require("koa-router");
const koaBody = require("koa-body");
const koaStatic = require('koa-static')
const parameter = require('koa-parameter') // 没什么人用
const error = require('koa-json-error')
const { connectionStr } = require('./config')
const routing = require('./routes'); // 引入自动路由注册
const app = new Koa();

mongoose.connect(connectionStr, { useNewUrlParser: true }, () => {
  console.log('success');
})

mongoose.connection.on('error', console.error);
/* app.use(async (ctx, next) => {
   try {
     await next();

   } catch (err) {
    ctx.status = err.status || err.statusCode || 500
     ctx.body = {
       message: err.message
     }
   }
 })
*/

app.use(koaStatic(path.join(__dirname, 'public')))


// 使用koa-json-error
app.use(error({
  // error是原生的error ，第二个是返回的数据但是我们根据环境指定其返回
  postFormat: (error, { stack, ...rest }) => process.env.NODE_ENV === 'production' ? rest : { stack, ...rest }
}))


app.use(
  morgan(
    //默认使用就是这个流输出(控制台输出的意思) 所以可省略第二个参数
    "dev", { stream: process.stdout, }
  )
);

// 上传文件配置
app.use(koaBody({
  multipart: true,
  formidable: {
    uploadDir: path.join(__dirname, '/public/uploads'),
    keepExtensions: true,
  }
}))
app.use(parameter(app))
//注册路由
routing(app)
//app.use(userRouter.routes(), userRouter.allowedMethods()) 这个设置很鸡肋，没啥用，应该用上面的这个


//未找到页面路由
// app.use((ctx) => {
//   // console.log(process.cwd()); // 项目目录
//   // throw new global.errs.ParameterException('你访问了火星', 404)
//   ctx.status = 404;
//   ctx.body = {
//     code: 404,
//     message: '你访问了火星'
//   }
// })


app.listen(3002, () => {
  console.log("listening in 3002");
})